/**
 * 文件名：@AfwJpaRepositoryFactoryBean.java <br/>
 * 包名：cn.efunbox.afw.data.jpa.spring.support <br/>
 * 项目名：afw-data <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.data.jpa.spring.support;

import java.io.Serializable;

import javax.persistence.EntityManager;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.core.support.RepositoryFactorySupport;

/**
 * 类名：AfwJpaRepositoryFactoryBean  <br />
 *
 * 功能：Jpa仓库接口实体化工厂
 *
 * @author xtwin <br />
 * 创建时间：2016年7月26日 下午3:05:27  <br />
 * @version 2016年7月26日
 */
public class AfwJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> extends JpaRepositoryFactoryBean<T, S, ID> implements ApplicationContextAware {

	// spring上下文
	private ApplicationContext ctx;
	
	// 工厂名称
	protected String factoryName = "_RepositoryFactory";

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月26日 下午3:09:31<br/>
	 * 
	 * @param entityManager
	 * @return <br/>
	 * @see org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean#createRepositoryFactory(javax.persistence.EntityManager)
	 */
	@Override
	protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
		//return ctx.getBean(factoryName, RepositoryFactorySupport.class);
		return ctx.getBean(RepositoryFactorySupport.class);
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月26日 下午3:32:43<br/>
	 * 
	 * @param applicationContext
	 * @throws BeansException <br/>
	 * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
	 */
	@Override
	public void setApplicationContext(ApplicationContext ctx) throws BeansException {
		this.ctx = ctx;
	}

	/**
	 * @version 2016年7月26日-下午3:35:41
	 */
	public void setFactoryName(String factoryName) {
		this.factoryName = factoryName;
	}
}